// JavaScript Document
/*
TODO:
  로컬스토리지 저장 목록
  - 최근 검색기록 
  - 관심품목 & 관련메모 : User Key가 동일한 경우 모든 웹브라우저 && 로그인 한 각 PC 마다 동기화 필수 
  - 광고내용 & 업체정보 : 웹소켓을 이용한 비동기 server-push 방식으로 저장 후 검색에 연동한 광고노출 또는 랜덤 노출
    Cr, FF에서는 SQlite를 사용하여 localStorage 동작


  초기화싯점에서 기능탐지, 브라우저탐지,.... (페이지수준으로 분기)
  자바스크립트 패턴  #인사이트 p.92
  
  자바스크립트 패턴  #인사이트 p.245
  var isIE = /*@cc_on!@/false;    // true 반환, 주의:@/ 사이에 * 추가할 것
  
  자바스크립트 완벽가이드 #인사이트 p.346, 347
  IE에서만 실행되는 자바스크립트 조건부 주석
  /*@cc_on
  @if(@_jscript)          //  @_jscript는 마이크로소프트의 자바스크립트 인터프리터 이름
  
  	alert('IE');
  	
	
  @end
  @/           // 주의:@/ 사이에 * 추가할 것
  
//***************
추가 데이터전달   
자바스크립트 객체지향프로그래밍 #위키북스 p.344
1.	$('p').bind('click', {foo: 'bar'}, handler);
	function handler(e) {
		alert(e.data.foo);
	}
자바스크립트 객체지향프로그래밍 #위키북스 p.
2.	$('p').load(url, {foo: 'bar'}, callback);
    

//***************
자바스크립트 패턴  #인사이트 p.92
function func(p, q) {
	console.log('argument.length: ' + arguments.length);
	console.log('func.length:'      + func.length);
}

func('p', 'q', 'r');    // func.length:2 , argument.length: 3 
func('p');              // func.length:2 , argument.length: 1 
//*************
jquery에서 each 사용 시 break 또는 continue를 사용해야 할 때
 
1. continue =>  return true;
2. break    =>  return false;
	
	
/**/

$(document).ready(function() {
	var exUrl 	= null,
	    storage = null,
		pushUrl = null,
	    SERVICE_NAME = null,   // 퍼펙트자바스크립트 #위키북스  p.486 p.487   localStorage 네임스페이스 관리	
	 	support_stroage = window.localStorage || window.sessionStorage,	    //  window['localStorage']  
	    Storage = Storage || window.Storage;     // IE
	



	  if(support_stroage) {			// 꼭 필요한 HTML5 그리고 HTML5 API #puple p.242
			if(!localStorage.version) {
				localStorage.version = '1.0';      // 
			}
			
			try {    
				storage = JSON.parse(localStorage.SERVICE_NAME || '{}'); 
			} catch(e) {
				storage = {};
			}	
			  
	  //		storage[key] = value;
	  //		localStorage.SERVICE_NAME = JSON.stringify(storage);
	  //		this.setItem(localStorage.SERVICE_NAME, JSON.stringify(storage));


			function storageEvt(e) {            
				if(e.key === (SERVICE_NAME && e.newValue)) {
					storage = JSON.parse(e.newValue);
				}
			}
			evt.add('document', 'storage', storageEvt);
		
		
					
			function setStorage(key, value) {
				storage[key] = value;
				localStorage.SERVICE_NAME = JSON.stringify(storage);
			}
		
			  
			try {	  
				Storage.prototype.setObject = function(key, value) {
					this.setItem(key, JSON.stringify(value));
				}
			} catch(e) { 
			
				if (e == QUOTA_EXCEEDED_ERR) {
					alert('할당량 초과!'); 
				}
				
				function setItemLocal(key, value) {
					localStorage.setItem(key, JSON.stringify(value));		
				}
				//	evt.add('document', 'beforeunload', setItemLocal);
			
			}	  
	
			try {	 		  
				Storage.prototype.getObject = function(key) {
					return this.getItem(key) && JSON.parse(this.getItem(key));
				}			
			} catch(e) { 				  
				function getItemLocal(key) {
					return JSON.parse(localStorage.getItem(key));
				}	
				//	evt.add('document', 'load', getItemLocal);		
			}
		
	  } else {		// support_stroage를 지원하지 않는경우 cookie 이용, polyfill보다 동작이 빠르다
		  $(function() {       		// 꼭 필요한 HTML5 그리고 HTML5 API #puple p.240
				function createCookie(name, value, days) {
					var expire = '';
					
					if(days) {
						var date = new Date();
						date.setTime(date.getTime() + (days*24*60*60*1000));
						expires = "; expires=" + date.toGMTString();
					}
					
					document.cookie = name + "=" + value + expires + "; path=/";
				}
			  
				function readCookie(name) {
					var result 	= '', 
						nameEQ 	= name + "=",
						ca 		= document.cookie.split(';');
						
					for(var i = 0; i < ca.length; i++) {
						var c = ca[i];
						
						while (c.charAt(0) =' ') {
							c = c.substring(1, c.length);
						}
						
						if(c.indexOf(nameEQ) == 0) {
							result = c.substring(nameEQ.length, c.length);
						} else {
							result = '';	
						}
					}
					return result;	
				}
			  
			  	localStorage = (function() {
							return {
								setItem: function(key, value) {
									createCookie(key, value, 3000);
								},
								
								getItem: function(key) {
									return readCookie(key);
								},
								
								removeItem: function(key) {
									createCookie(key, value, 0);
								}								
							};	  
							  
						 } ());
		  }());  
	  }     // EOF if(support_stroage)

/**/



/*
// polyfill localStorage IE7 에서 영구저장소 이용시 : 인터넷에서 발췌

	if(!window.localStorage) 
		window.localStorage = (function () { 
			var userdataKey = 'localStorage', 
				userdata = document.createElement('b'); 
	
			userdata.style.display = 'none'; 
			userdata.style.behavior = 'url("#default#userData")'; 
			// userdata.addBehavior('#default#userdata'); 
	
			document.body.appendChild(userdata); 
	
			userdata.load(userdataKey); 
	
			return { 
				setItem: function (key, val) { 
					userdata.setAttribute(key, val); 
					userdata.save(userdataKey); 
				}, 
	
				removeItem: function (key) { 
					userdata.removeAttribute(key); 
					userdata.save(userdataKey); 
				}, 
	
				getItem: function (key) { 
					return userdata.getAttribute(key); 
				} 
			} 
		})(); 
/**/


	var wn = window.navigator, 
	    ws = window.screen,      
	    userInfo = {						
				"hp" 			: "01022223333", 
				"UA" 			: wn.userAgent, 
				"paltform"  	: wn.platform, 
				"screen"		: ws.width +" * "+ ws.height,	
				"colorDepth"	: ws.colorDepth,
				"last_update"	: time.unix_timestamp()				
			};


	$.getJSON("http://jsonip.com?callback=?", function(data){    
			userInfo.ip = data.ip;
			
		//	alert(userInfo.ip);
			
			try {
				localStorage.setObject('client', userInfo);
			} catch(e) {			
				localStorage.setItem('client', JSON.stringify(userInfo));   // IE7, IE8 fallback
			}
	  });
//	localStorage.clear();












	










	

/*	socket.io
    // 예약이벤트 : message, connect, disconnect, open, close, error, retry, reconnect
	
    // json 객체 전송시
	socket.emit('message', {msg: '문자열'})
	socket.json.send({msg: '문자열'});    
	
	// json 객체 수신시     
	socket.on('message', function (data) { console.log(data.msg);});   
		
	
	
	var ss;
	
	var printMessage = function(msg) {
			$('#noti').append('<p>' + msg + '</p>');
		}	
	
	var socket = io.connect('http://localhost:52273');
	

	 
	socket.on('news', function (data) {
		console.log(data.hello);
		socket.emit('my other event', { my: 'data' });
	});
	
	socket.on('co', function (data) {
		ss = JSON.parse(data);
	//	console.log('data: ' + data);
	});
	
	socket.on('connect', function () {
		printMessage('서버의 소켓에 연결되었습니다.');		// 클라이언트에 출력
		socket.send('클라이언트에서 보내는 메시지');  		// 서버에 출력
	});	
	
	socket.on('message', function (msg) {		
		printMessage(msg);
//		console.log(msg);
	});		

	socket.on('msg', function (data) {
		printMessage(data.msg + ' : ' + data.now);
	});		
/**/
	var	arrangeCol = function() {			
						  $('span', 'dd').each(function() {
							  var w	= $(this).data('width') || $(this).attr('data-width');
							  if(w == undefined) return true;
							  $(this).css({'width': w +'px', 'display':'inline-block'});
						  });		
					  };
	
		
		
	if($('#rdoSupplies:checked').length == 1 ) {
		$('#rdoSupplies').next('label').addClass('active');	
	} else {
		$('#rdoPrinter').next('label').addClass('active');		
	}
	
	$('#rdoPrinter, #rdoSupplies').bind({
		click: function() {
			$('#txtKeyString').focus();	
			$('#frmSearch label').removeClass('active');
			$(this).next('label').addClass('active');	
		}
	});	
	
	
	$('#txtKeyString').bind({			
		click: function() {    //  TODO: 광고는 localStorage에서 가져올 것, 광고에 ID부여하여 표시여부 제어
			var waitingAd = "<img id='ad_banner' src='http://placehold.it/200x100' class='fadein[8000]' /> <p>로컬스토리지에 저장된 광고를 끌어옴</p>";		
			
			$(this).val('');		
				
			$('#site_content').empty().append("<div id='site_content_sub' ></div>");			
			
			if($('#ad_banner').length == 0) {			
				$('#site_content_sub').append(waitingAd);
			}
		},	
		keyup: function() {
			var $searchVal = $(this).val(),	
				num = 0;
			
		     for (var i=0, len = $searchVal.length; i<len; i++) {
          		var ch = $searchVal.charAt(i).trim();
				
		  		if(ch.length) {
					num++;
				}				
			 }
		
			if(num < 3) {
				$('#btnSearch').attr('disabled', true);			
			} else {
				$('#btnSearch').attr('disabled', false);	
			}
		}
	});
	
	$('#loadingImg').bind({
		ajaxStart: function() {
			$(this).removeClass('hidden');	
		},
		ajaxStop: function() {
			$(this).addClass('hidden');	
		}
		
	});





	$('#frmSearch').bind({		
		submit: function(e) {			
			var $searchVal = $('#txtKeyString').val(),	
				pattern	    = /[A-Za-z0-9\' \']{3,20}/,
				$chkRdoVal 	= $('#rdoPrinter:checked').val() || $('#rdoSupplies:checked').val(),
				$chkSpanVal	= ($chkRdoVal === 'printer') ? '프린터' : '소모품',   
				url     	= '/2013p79/common/class/search/goto.php', 
				qString 	= $('#frmSearch').serialize(),				
				num = 0,
				str = null;
				
			 e.preventDefault();	
		     for (var i=0, len = $searchVal.length; i<len; i++) {
          		var ch = $searchVal.charAt(i).trim();
				
		  		if(ch.length) {
					num++;
				}				
			 }
		
			if(!pattern.test($searchVal) || num < 3) {			
				return false;			
			}
			
			if(exUrl == qString) {		
				$('#showChoice').empty();               
				$('dl').removeClass('hidden');  
				return false;	
			}
				
			exUrl = qString;	
			str   = url + '?' + qString;
			$('#site_content_sub').load(str + ' #site_content', arrangeCol);
			
			str = str.split('2013p79/');
			pushUrl = {"prev_url" : str[1]};
			history.pushState(pushUrl, null, '/2013p79/');
			
			// $('#site_footer').remove();
		}
	});







	$('#makerPool span a').live({       // 주의: live 사용 
		click: function(e) {
			e.preventDefault();
			var href 	= e.target.href.split('#'),
				waitingAd = "<img src='http://placehold.it/200x100' /><br /> 이곳은 광고 영역입니다.<br /> mouseover시 우측에 광고박스 표시합니다.";
			
			$('#showChoice').empty();	    
			$('dl').addClass('hidden');	   
			$('#'+href[1]).closest('dl').clone(true)
				.appendTo('#showChoice')
				.removeClass('hidden');
			$('#showChoice').append(waitingAd); 	
		}
	});


	
//	$('dd a.mylinks', '#content_main').addcontextmenu('contextmenu1');
	$('dd a', '#content_main').live({       // 주의: jquery.1.8이하에서 live 사용   
	    
		click: function(e) {
			var serial	= $(this).data('serial') || $(this).attr('data-serial') || $(this).dataset.serial,
			   	supl 	= /^s\d{5}/,
				prt 	= /^p\d{5}/
				str 	= null ;
			
			e.preventDefault();
			exUrl 	= null;
			
	        $('#site_content_sub').load($(this).attr('href') + ' #site_content', arrangeCol);	
			
	
			
			
			str		= $(this).attr('href').split('2013p79/');
			
			pushUrl = {"prev_url" : str[1]};				
			history.pushState(pushUrl, null, '/2013p79/');
			
		//	$('#site_footer').remove();
			
			
			
			if(support_stroage && !!supl.test(serial)) {	 
			
			
			
			
				/*
				try {	
				
				
						
					SERVICE_NAME = 'SUP';
					localStorage.setObject(SERVICE_NAME, time.unix_timestamp());	 
					localStorage.setObject(serial, time.unix_timestamp());	
					localStorage.setObject(serial, ss);	  
				} catch(e) { 	     // IE : Stroage 지원하지 않는 경우
					setItemLocal(serial, 'ss');	 
				}    /**/
	//			localStorage.clear();		
			}
/**/
		},
		contextmenu: function(e) {				
			$(this).css('backgroundColor','yellow');		
		}
/*		
		mouseover: function() {    // TODO:  관심품목 등록, 메모 작성메뉴를 이곳에???
			
		},
		mouseout: function() {
			
		},
		contextmenu: function(e) {   // TODO: 비즈메뉴(광고등록)를 이곳에???  비즈회원에게만 조건부 활성화?
			alert('assa!!');	
			e.preventDefault();
		},
		
/**/		
	});




	$('#goTop').addClass('hidden');	
	
	$(window).scroll(function() {	
		var goTop = $('#goTop'), 
		    flag=1;
		
		$(goTop).removeClass('hidden');	
		
		$(goTop).click(function(){
			  $(goTop).mouseleave(function() {
				  if(flag == 0)	 
				  	return false;
					
				  flag = 0;
				  $(goTop).addClass('hidden');
			  });
		});
		
	});	
	
   

/*  
	window.onpopstate = function() {	
		if(history.state && history.state.prev_url) {
		//	 location.replace(history.state.prev_url);
			 location.href = history.state.prev_url;
		}
	};	
 */
    $(window).bind('popstate', function() {	
		if(history.state && history.state.prev_url) {
		//	 location.replace(history.state.prev_url);
			 location.href = history.state.prev_url;
		//	 arrangeCol();
		}
	});
 
 
 
 
 
 
});


/*


$(function(){
	// contextmenu 목차는 PageSite.php에
    $.contextMenu('html5');
//	$('.data-title').attr('data-menutitle','OnBiz');
	
});


*/









